perm filename LPC1.F4[1,ALS] blob
sn#001066 filedate 1972-06-01 generic text, type T, neo UTF8
00100 SUBROUTINE LPC1(IFFY,NPTS,CF,M,RO,ERRN,ERR,SPT,NSP,ISSW)
00200 C THE PARAMETERS IN THE LIST ARE DEFINED AS FOLLOWS:
00300 C IFFY←THE INPUT DATA ARRAY OF INTEGERS...A TIME SERIES
00400 C NPTS←THE NUMBER OF POINTS IN THE TIME SERIES
00500 C CF← THE ARRAY IN WHICH THE FILTER COEFFICIENTS
00600 C ARE TO BE RETURNED.
00700 C M← THE NUMBER OF FILTER COEFFICIENTS DESIRED.
00800 C RO← COMPUTED FILTER SCALE FACTOR.
00900 C ERRN←NORMALIZED ERROR VALUE.
01000 C ERR← ARRAY IN WHICH THE SERIES OF ERROR IS RETURNED.
01100 C SPT← THE ARRAY IN WHICH THE REAL SPECTRUM IS RETURNED.
01200 C NSP← THE NUMBER OF POINTS IN THE REAL SPECTRUM.
01300 C ISSW← AN INTEGER SWITCH USED TO SELECT THE FOLLOWING
01400 C MODES OF OPERATION:
01500 C 1: CALCULATE AND RETURN ALL VALUES IN LIST.
01600 C 2: CALCULATE RO, ERRN, AND CF.
01700 C 3: CALCULATE RO, ERRN, CF, AND ERR.
01800 C 4: CALCULATE RO, ERRN, CF, AND SPT.
01900 C 5: USING CF AND M AS INPUT CALCULATE ERR AND SPT.
02000 C 6: " " " " " " " ERR.
02100 C 7: " " " " " " " SPT.
02200 C 1X: FOR ANY X ABOVE IMPLYING IFFY INPUT,
02300 C SUPPRESS HAMMING WINDOW APPLICATION.
02400 DIMENSION IFFY(1),CF(1),ERR(1),SPT(1),X(512),Y(512)
02500 TPI=2.*355./113.
02600 ISW=ISSW
02700 IHAM=1
02800 C IHAM=1←APPLICATION OF A HAMMING WINDOW.
02900 IF ((ISW -10).GT.0) IHAM=0
03000 IF (IHAM.EQ.0) ISW=ISW-10
03100 C LOC 100 IS CALCULATION OF CF, RO, AND ERRN.
03200 IF (ISW.LE.6) GO TO 10
03300 1 IF (ISW.LT.5) GO TO 100
03400 C LOC 200 IS CALCULATION OF ERR.
03500 2 IF ((ISW.EQ.1).OR.(ISW.EQ.3).OR.(ISW.EQ.5).OR.(ISW.EQ.6)
03600 1 ) GO TO 200
03700 C LOC 300 IS CALCULATION OF SPT.
03800 3 IF ((ISW.EQ.1).OR.(ISW.EQ.4).OR.(ISW.EQ.5).OR.(ISW.EQ.7)
03900 1 ) GO TO 300
04000 RETURN
04100 10 NP=NPTS-1
04200 C CALCULATE THE DIFFERENCE SIGNAL
04300 DO 11 J=1,NP
04400 11 X(J)=IFFY(J+1)-IFFY(J)
04500 IF (IHAM.EQ.0) GO TO 1
04600 C APPLY A HAMMING WINDOW TO THE TIME SERIES.
04700 DT=NP
04800 X(NPTS)=X(NPTS-1)*.08
04900 DO 12 J=1,NP
05000 T=J-1
05100 12 X(J)=X(J)*(.54-.46*COS(TPI*T/DT))
05200 GO TO 1
05300 C CALCULATE AUTOCORRELATION COEFFICIENTS AND SOLVE
05400 C FOR INVERSE FILTER COEFFICIENTS
05410 100 DO 105 J=1,NPTS
05420 105 Y(J)=X(J)
05500 CALL INVFL(Y,NPTS,M,RO,ERRN)
05600 C Y ARRAY RETURNS 1.,A1,A2,...,AM,0.,....0.
05700 MM=M+1
05800 DO 125 J=1,MM
05900 125 CF(J)=Y(J)
06000 GO TO 2
06100 200 MM=M+1
06200 DO 220 J=MM,NPTS
06300 ERR(J)=0.
06400 DO 220 K=0,M
06500 220 ERR(J)=ERR(J)+X(J-K)*CF(K+1)
06600 DO 230 J=1,M
06700 ERR(J)=0.
06800 DO 230 K=0,M
06900 IF ((J-K).GE.1) ERR(J)=ERR(J)+CF(K+1)*X(J-K)
07000 230 CONTINUE
07100 GO TO 3
07200 300 DO 303 J=1,512
07300 X(J)=0.
07400 303 Y(J)=0.
07500 MM=M+1
07600 DO 310 J=1,MM
07700 310 X(J)=CF(J)
07800 C SHUFFLE DATA FOR CALC OF REAL TRANSFORM
07900 MM2=MM/2 +1
08000 DO 320 K=1,MM
08100 K1=2*K-1
08200 K2=2*K
08300 X(K)=X(K1)
08400 320 Y(K)=X(K2)
08500 NMOD=1
08600 323 IF (2**NMOD.GE.NSP) GO TO 326
08700 NMOD=NMOD+1
08800 GO TO 323
08900 326 IF ((2*MM2).LT.MM) MM2=MM2+1
09000 MOD=1
09100 330 IF (2**MOD.GE.MM2) GO TO 340
09200 MOD=MOD+1
09300 GO TO 330
09400 340 CALL FFTP(X,Y,NMOD,MOD)
09500 CALL RBITS(X,Y,NMOD)
09600 CALL USCRM(X,Y,NMOD)
09700 C CALCULATE LOG OF RECIPROCAL INVERSE FILTER SPECTRUM
09800 DO 350 J=1,NSP
09900 350 X(J)=X(J)*X(J)+Y(J)*Y(J)
10000 DO 360 J=1,NSP
10100 360 SPT(J)=-10.*ALOG10(X(J))
10200 RETURN
10300 END
00100 SUBROUTINE INVFL(X,NP,M,RO,ERRN)
00200 DIMENSION X(512)
00300 DIMENSION F(50),TF(50),A(50),R(50)
00400 C CALCULATION OF M+1 LENGTH AUTOCORRELATION SEQUENCE
00500 C FROM THE INVERSE FILTER INPUT SEQUENCE
00600 MP1=M+1
00700 DO 11 JJ=1,MP1
00800 J=JJ-1
00900 MMJ=NP-J
01000 SS=0.
01100 DO 10 I=1,MMJ
01200 IPJ=I+J
01300 10 SS=SS+X(I)*X(IPJ)
01400 11 R(JJ)=SS
01500 RO=R(1)
01600 C FORTRAN IMPLEMENTATION OF LEVINSON'S METHOD FOR
01700 C SOLVING THE AUTOCORRELATION MATRIX
01800 F(1)=1.
01900 ALPHA=R(1)
02000 BETA=R(2)
02100 A(1)=-R(2)/R(1)
02200 GAMMA=A(1)*R(2)
02300 DO 1 N=2,M
02400 NM1=N-1
02500 C=-BETA/ALPHA
02600 IF (N-2) 2,2,3
02700 3 DO 4 J=2,NM1
02800 NN=N-J+1
02900 4 TF(J)=F(J)+C*F(NN)
03000 DO 5 J=2,NM1
03100 5 F(J)=TF(J)
03200 2 F(N)=C*F(1)
03300 ALPHA=ALPHA+C*BETA
03400 BETA=0.
03500 DO 6 J=1,N
03600 NN=N-J+2
03700 6 BETA=BETA+F(J)*R(NN)
03800 Q=-(R(N+1)+GAMMA)/ALPHA
03900 DO 7 J=1,NM1
04000 NN=N-J+1
04100 7 A(J)=A(J)+Q*F(NN)
04200 A(N)=Q*F(1)
04300 GAMMA=0.
04400 DO 8 J=1,N
04500 NN=N-J+2
04600 8 GAMMA=GAMMA+A(J)*R(NN)
04700 1 CONTINUE
04800 C CALCULATE NORMALIZED ERROR ERRN
04900 C SM=0.
05000 C DO 77 J=1,M
05100 C 77 SM=SM+A(J)*R(J+1)
05200 C ERRN=1.+SM/R(1)
05300 C PLACE COEFFICIENTS IN PROPER LOCATIONS OF THE
05400 C REAL VECTOR X FOR FFT-ING TO GET INVERSE SPECTRUM
05500 DO 51 J=1,M
05600 51 X(J+1)=A(J)
05700 X(1)=1.
05800 MP1=MP1+1
05900 DO 123 J=MP1,512
06000 123 X(J)=0.
06100 RETURN
06200 END
00100 SUBROUTINE FFTP(X,Y,M,L)
00200 DIMENSION X(512),Y(512)
00300 N=2**M
00400 L2=2**L
00500 DO 1 LO=1,M
00600 LMX=2**(M-LO)
00700 LMM=LMX
00800 LIX=2*LMX
00900 SCL=6.283185/LIX
01000 C TEST FOR PRUNING
01100 IF (LO-M+L) 20,30,30
01200 20 LMM=L2
01300 30 DO 1 LM=1,LMM
01400 ARG=(LM-1)*SCL
01500 C=COS(ARG)
01600 S=SIN(ARG)
01700 DO 1 LI=LIX,N,LIX
01800 J1=LI-LIX+LM
01900 J2=J1+LMX
02000 T1=X(J1)-X(J2)
02100 T2=Y(J1)-Y(J2)
02200 X(J1)=X(J1)+X(J2)
02300 Y(J1)=Y(J1)+Y(J2)
02400 X(J2)=C*T1+S*T2
02500 1 Y(J2)=C*T2-S*T1
02600 RETURN
02700 END
00100 SUBROUTINE RBITS(X,Y,M)
00200 DIMENSION X(512),Y(512),L(9)
00300 EQUIVALENCE(L9,L(1)),(L8,L(2)),(L7,L(3)),(L6,L(4)),
00400 1 (L5,L(5)),(L4,L(6)),(L3,L(7)),(L2,L(8)),(L1,L(9))
00500 C PERFORM BIT REVERSAL
00600 DO 70 J=1,9
00700 L(J)=1
00800 IF (J-M) 71,71,70
00900 71 L(J)=2**(M+1-J)
01000 70 CONTINUE
01100 JN=1
01200 DO 60 J1=1,L1
01300 DO 60 J2=J1,L2,L1
01400 DO 60 J3=J2,L3,L2
01500 DO 60 J4=J3,L4,L3
01600 DO 60 J5=J4,L5,L4
01700 DO 60 J6=J5,L6,L5
01800 DO 60 J7=J6,L7,L6
01900 DO 60 J8=J7,L8,L7
02000 DO 60 JR=J8,L9,L8
02100 IF (JN-JR) 61,61,62
02200 61 R=X(JN)
02300 X(JN)=X(JR)
02400 X(JR)=R
02500 FI=Y(JN)
02600 Y(JN)=Y(JR)
02700 Y(JR)=FI
02800 62 JN=JN+1
02900 60 CONTINUE
03000 RETURN
03100 END
00100 SUBROUTINE USCRM(X,Y,M)
00200 DIMENSION X(512),Y(512)
00300 I=2**M
00400 LO2=I/2
00500 SA=3.141593/I
00600 X(1)=2.*(X(1)+Y(1))
00700 Y(1)=0.
00800 LLL=LO2+1
00900 X(LLL)=2.*X(LLL)
01000 Y(LLL)=-2.*Y(LLL)
01100 DO 33 K=2,LO2
01200 J=I-K+2
01300 ANG=SA*(K-1)
01400 C=COS(ANG)
01500 S=SIN(ANG)
01600 AA=X(K)+X(J)
01700 BB=Y(K)-Y(J)
01800 CC=X(K)-X(J)
01900 DD=Y(K)+Y(J)
02000 XR=C*DD-S*CC
02100 XI=S*DD+C*CC
02200 X(K)=AA+XR
02300 Y(K)=BB-XI
02400 X(J)=AA-XR
02500 Y(J)=-BB-XI
02600 33 CONTINUE
02700 RETURN
02800 END